package logica.pessoa;

import logica.util.Data;
import logica.util.Endereco;



/**
 * 
 * Classe PessoaFisica
 * Pessoa Fisica inclui todos as pessoas fisicas que estao ligadas ao sistema 
 * 
 * @author Jose Arthur Morais (Tabira)
 * @since 15/10/2010
 */
public class PessoaFisica extends Pessoa{
	
	private  String CPF;
	private  String RG;
	private  Data dataDeNascimento;
	private  String naturalidade;
	
	
	/**
	 * Contrutor de Pessoa Fisica
	 * @param String nome Nome completo da pessoa fisica
	 * @param String telefone Telefone no formato  da pessoa fisica
	 * @param String email Endereco de e-mail da pessoa
	 * @param Endereco endereco Endereco fisico da pessoa
	 * @param String cpf Representacao em String do CPF
	 * @param String rg Representacao em String do RG
	 * @param Data dataDeNascimento Objeto Data que representa a data de nascimento 
	 * @param String naturalidade Indica a cidade onde a pessoa nasceu
	 * 
	 * @throws Exception Ver excessao de Pessoa
	 * @thows Exception O CPF tem que ter exclusivamente 11 digito
	 * @thows ExceptionCadrastado O CPF deve ser individual
	 * @throws Exception O RG tem que ter exclusivamente 7 digito
	 * @thows ExceptionCadrastado O RG deve ser individual
	 * @throws Exception naturalidade com digito ou sem caracteres
	 * @throws Exception objeto Data nulo
	 *  
	 * @see {@link Pessoa}  {@link Usuario} {@link Cliente} {@link Gerente} {@link Funcionario}{@link PessoaJuridica}
	 */
	public PessoaFisica(String nome, String telefone, String email, Endereco endereco, String cpf,String rg, Data dataDeNascimento, String naturalidade ) throws Exception{
		super(nome, telefone, email, endereco);
		setCPF(cpf);
		setRG(rg);
		setDataDeNascimento(dataDeNascimento);
		setNaturalidade(naturalidade);
		
	}
	
	/**
	 * Consulta usuario da pessoa
	 * @return String CPF
	 */
	public String getCPF() {
		return CPF;
	}
	
	
	/**
	 * Muda o CPF
	 * @param String cpf
	 * @throws Exception 
	 * @exception  O CPF tem que ter exclusivamente 11 digito
	 * @exception  O CPF deve ser individual
	 */
	public void setCPF(String cpf) throws Exception {
	
		validaCPF(cpf);
			
		CPF = cpf;
	}
	
	
	/**
	 * Consulta RG da pessoa
	 * @return String RG
	 */
	public String getRG() {
		return RG;
	}
	
	
	/**
	 * Muda o RG 
	 * @param String rg
	 * @throws Exception 
	 * @exception O RG tem que ter exclusivamente 7 digito
	 * @exception O RG deve ser individual
	 */
	public void setRG(String rg) throws Exception {
		
		validaRG(rg);
		
		RG = rg;
	}
	
	
	/**
	 * Consulta  data de nascimento da pessoa
	 * @return String data de nascimento 
	 */
	public Data getDataDeNascimento() {
		return dataDeNascimento;
	}
	
	
	/**
	 * Muda a data
	 * @param String dataDeNascimento
	 */
	public void setDataDeNascimento(Data dataDeNascimento) throws Exception {
		if (dataDeNascimento == null) {
			throw new Exception("Data invalida.");
		}
		dataDeNascimento = dataDeNascimento;
	}
	
	
	/**Consulta naturalidade da pessoa 
	 * 
	 * @return String naturalidade
	 */
	public String getNaturalidade() {
		return naturalidade;
	}
	
	
	/**
	 * Muda a naturalidade 
	 * @param String naturalidade
	 * @throws Exception naturalidade com digito ou sem caracteres
	 */
	public void setNaturalidade(String naturalidade) throws Exception{
		
		validaNaturalidade(naturalidade);
		
		this.naturalidade = naturalidade;
	}
	
	public static void validaCPF(String cpf) throws Exception{
		if (cpf == null || ! stringSoTemDigito(cpf) || cpf.length() != 11)
			throw new Exception("CPF invalido");
	}
	
	public static void validaRG(String rg) throws Exception{
		if ( rg == null || !stringSoTemDigito(rg) || rg.length() < 7 || rg.length() > 20)
			throw new Exception ("RG invalido");
	}
	
	public static void validaNaturalidade(String naturalidade) throws Exception{
		if (naturalidade == null && stringTemDigito(naturalidade) || stringEhVazio(naturalidade))
			throw new Exception ("naturalidade invalida");
	}
	public static void validaDataDeNascimento(String data){
		//TODO
	}
		
	
}




















